allow logging of any object by inspecting non-strings

Andrew Cantino 10 lat temu
rodzic
commit
7ee3c01690
3 zmienionych plików z 8 dodań i 1 usunięć
  1. 0 1
      app/models/agent.rb
  2. 3 0
      app/models/agent_log.rb
  3. 5 0
      spec/models/agent_log_spec.rb

+ 0 - 1
app/models/agent.rb

@@ -195,7 +195,6 @@ class Agent < ActiveRecord::Base
195 195
   end
196 196
 
197 197
   def log(message, options = {})
198
-    puts "Agent##{id}: #{message}" unless Rails.env.test?
199 198
     AgentLog.log_for_agent(self, message, options)
200 199
   end
201 200
 

+ 3 - 0
app/models/agent_log.rb

@@ -15,6 +15,8 @@ class AgentLog < ActiveRecord::Base
15 15
   before_save :truncate_message
16 16
 
17 17
   def self.log_for_agent(agent, message, options = {})
18
+    puts "Agent##{agent.id}: #{message}" unless Rails.env.test?
19
+
18 20
     log = agent.logs.create! options.merge(:message => message)
19 21
     if agent.logs.count > log_length
20 22
       oldest_id_to_keep = agent.logs.limit(1).offset(log_length - 1).pluck("agent_logs.id")
@@ -34,6 +36,7 @@ class AgentLog < ActiveRecord::Base
34 36
 
35 37
   def scrub_message
36 38
     if message_changed?
39
+      self.message = message.inspect unless message.is_a?(String)
37 40
       self.message.scrub!{ |bytes| "<#{bytes.unpack('H*')[0]}>" }
38 41
     end
39 42
     true

+ 5 - 0
spec/models/agent_log_spec.rb

@@ -90,6 +90,11 @@ describe AgentLog do
90 90
       AgentLog.log_for_agent(agents(:jane_website_agent), "some message", :level => 4, :outbound_event => events(:jane_website_agent_event))
91 91
       expect(agents(:jane_website_agent).reload.last_error_log_at.to_i).to be_within(2).of(Time.now.to_i)
92 92
     end
93
+
94
+    it "accepts objects as well as strings" do
95
+      log = AgentLog.log_for_agent(agents(:jane_website_agent), events(:bob_website_agent_event).payload)
96
+      expect(log.message).to include('"title"=>"foo"')
97
+    end
93 98
   end
94 99
 
95 100
   describe "#log_length" do